Imports System.Data.SqlClient

Public Class cls_PDproceso_

    Implements ICloneable

#Region "Variables ..."
    Private int_idPDproceso As Integer = 0
    Private int_idproduccion As Integer = 0
    Private int_idproceso As Integer = 0
    Private dbl_cantidad As Double = 0
    Private bit_segunproduccion As Boolean = False
    Private int_tiposegunproduccion As Integer = 0
    Private dbl_valor As Double = 0
    Private int_tiposegunvalor As Integer
    Private int_idpersonal As Integer

    Private obj_proceso As cls_proceso_
    Private obj_PDprocesoresultado_ As cls_PDprocesoresultado_

    Private col_Items As Collections.Generic.List(Of cls_PDproceso_) = Nothing
#End Region

#Region "Propiedades ..."
    ReadOnly Property This
        Get
            Return Me
        End Get
    End Property
    ReadOnly Property ThisDescripcion As String
        Get
            Return Me.ToString
        End Get
    End Property
    ReadOnly Property pKey
        Get
            Return idPDproceso
        End Get
    End Property
    Property idPDproceso() As Integer
        Get
            idPDproceso = int_idPDproceso
        End Get
        Set(ByVal value As Integer)
            int_idPDproceso = value
        End Set
    End Property
    Property idproduccion() As Integer
        Get
            idproduccion = int_idproduccion
        End Get
        Set(ByVal value As Integer)
            int_idproduccion = value
        End Set
    End Property
    Property idproceso() As Integer
        Get
            idproceso = int_idproceso
        End Get
        Set(ByVal value As Integer)
            int_idproceso = value
        End Set
    End Property
    Property cantidad() As Double
        Get
            cantidad = dbl_cantidad
        End Get
        Set(ByVal value As Double)
            dbl_cantidad = value
        End Set
    End Property
    Property segunproduccion() As Boolean
        Get
            segunproduccion = bit_segunproduccion
        End Get
        Set(ByVal value As Boolean)
            bit_segunproduccion = value
        End Set
    End Property
    Property tiposegunproduccion() As Integer
        Get
            tiposegunproduccion = int_tiposegunproduccion
        End Get
        Set(ByVal value As Integer)
            int_tiposegunproduccion = value
        End Set
    End Property
    Property valor() As Double
        Get
            valor = dbl_valor
        End Get
        Set(ByVal value As Double)
            dbl_valor = value
        End Set
    End Property
    Property tiposegunvalor As Integer
        Get
            tiposegunvalor = int_tiposegunvalor
        End Get
        Set(ByVal value As Integer)
            int_tiposegunvalor = value
        End Set
    End Property
    Property idpersonal As Integer
        Get
            idpersonal = int_idpersonal
        End Get
        Set(ByVal value As Integer)
            int_idpersonal = value
        End Set
    End Property
    Property proceso() As cls_proceso_
        Get
            If IsNothing(obj_proceso) Then
                obj_proceso = New cls_proceso_
                If Not obj_proceso.Buscar(idproceso) Then
                    obj_proceso = Nothing
                End If
            End If
            proceso = obj_proceso
        End Get
        Set(ByVal value As cls_proceso_)
            obj_proceso = value
        End Set
    End Property
    Property PDprocesoresultado_() As cls_PDprocesoresultado_
        Get
            If IsNothing(obj_PDprocesoresultado_) Then
                obj_PDprocesoresultado_ = New cls_PDprocesoresultado_
                If Not obj_PDprocesoresultado_.CargarXidPDproceso(int_idPDproceso) Then
                    obj_PDprocesoresultado_ = Nothing
                End If
            End If
            PDprocesoresultado_ = obj_PDprocesoresultado_
        End Get
        Set(ByVal value As cls_PDprocesoresultado_)
            obj_PDprocesoresultado_ = value
        End Set
    End Property
    Property Items() As Collections.Generic.List(Of cls_PDproceso_)
        Get
            Items = col_Items
        End Get
        Set(ByVal value As Collections.Generic.List(Of cls_PDproceso_))
            col_Items = value
        End Set
    End Property
#End Region

    Public Overrides Function ToString() As String
        Return proceso.ToString
    End Function
    Private Sub CargarColeccion(ByVal obj_Reader As SqlDataReader)
        col_Items = New Collections.Generic.List(Of cls_PDproceso_)
        While obj_Reader.Read()
            Dim Elemento As New cls_PDproceso_
            Elemento.int_idPDproceso = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idPDproceso")))

            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproduccion"))) = False Then
                Elemento.int_idproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproduccion")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproceso"))) = False Then
                Elemento.int_idproceso = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproceso")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("cantidad"))) = False Then
                Elemento.dbl_cantidad = (obj_Reader.GetValue(obj_Reader.GetOrdinal("cantidad")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("segunproduccion"))) = False Then
                Elemento.bit_segunproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("segunproduccion")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunproduccion"))) = False Then
                Elemento.int_tiposegunproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunproduccion")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("valor"))) = False Then
                Elemento.dbl_valor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("valor")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunvalor"))) = False Then
                Elemento.int_tiposegunvalor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunvalor")))
            End If
            If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal"))) = False Then
                Elemento.int_idpersonal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal")))
            End If
            col_Items.Add(Elemento)
        End While
    End Sub

    Private Sub CargarVariables(ByVal obj_Reader As SqlDataReader)
        obj_Reader.Read()
        int_idPDproceso = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idPDproceso")))

        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproduccion"))) = False Then
            int_idproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproduccion")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idproceso"))) = False Then
            int_idproceso = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idproceso")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("cantidad"))) = False Then
            dbl_cantidad = (obj_Reader.GetValue(obj_Reader.GetOrdinal("cantidad")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("segunproduccion"))) = False Then
            bit_segunproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("segunproduccion")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunproduccion"))) = False Then
            int_tiposegunproduccion = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunproduccion")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("valor"))) = False Then
            dbl_valor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("valor")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunvalor"))) = False Then
            int_tiposegunvalor = (obj_Reader.GetValue(obj_Reader.GetOrdinal("tiposegunvalor")))
        End If
        If IsDBNull(obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal"))) = False Then
            int_idpersonal = (obj_Reader.GetValue(obj_Reader.GetOrdinal("idpersonal")))
        End If
    End Sub

    Public Function Nuevo(Optional ByVal ObtenerID As Boolean = False) As Boolean
        Nuevo = False
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__Nuevo"
                .Parameters.Add("@idproduccion", SqlDbType.Int).Value = int_idproduccion
                .Parameters.Add("@idproceso", SqlDbType.Int).Value = int_idproceso
                .Parameters.Add("@cantidad", SqlDbType.Decimal).Value = dbl_cantidad
                .Parameters.Add("@segunproduccion", SqlDbType.Bit).Value = bit_segunproduccion
                .Parameters.Add("@tiposegunproduccion", SqlDbType.Int).Value = int_tiposegunproduccion
                .Parameters.Add("@valor", SqlDbType.Decimal).Value = dbl_valor
                .Parameters.Add("@tiposegunvalor", SqlDbType.Int).Value = int_tiposegunvalor
                .Parameters.Add("@idpersonal", SqlDbType.Int).Value = int_idpersonal
                .ExecuteNonQuery()
            End With
            Nuevo = True
            CargarUltimo()

            'Creacion de produccion detalle--------------------------------------------------
            If Not IsNothing(obj_PDprocesoresultado_) Then
                If Not IsNothing(obj_PDprocesoresultado_.Items) Then
                    For Each PDprocesoresultado As cls_PDprocesoresultado_ In obj_PDprocesoresultado_.Items
                        PDprocesoresultado.idPDproceso = idPDproceso
                        PDprocesoresultado.Nuevo(True)
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Crear el registro de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Function

    Public Sub Modificar()
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__Modificar"
                .Parameters.Add("@idPDproceso", SqlDbType.Int).Value = int_idPDproceso
                .Parameters.Add("@idproduccion", SqlDbType.Int).Value = int_idproduccion
                .Parameters.Add("@idproceso", SqlDbType.Int).Value = int_idproceso
                .Parameters.Add("@cantidad", SqlDbType.Decimal).Value = dbl_cantidad
                .Parameters.Add("@segunproduccion", SqlDbType.Bit).Value = bit_segunproduccion
                .Parameters.Add("@tiposegunproduccion", SqlDbType.Int).Value = int_tiposegunproduccion
                .Parameters.Add("@valor", SqlDbType.Decimal).Value = dbl_valor
                .Parameters.Add("@tiposegunvalor", SqlDbType.Int).Value = int_tiposegunvalor
                .Parameters.Add("@idpersonal", SqlDbType.Int).Value = int_idpersonal
                .ExecuteNonQuery()
            End With

            'Creacion/modificacion de produccionresultado-------------------------------------
            If Not IsNothing(obj_PDprocesoresultado_) Then
                If Not IsNothing(obj_PDprocesoresultado_.Items) Then
                    For Each PDprocesoresultado As cls_PDprocesoresultado_ In obj_PDprocesoresultado_.Items
                        If PDprocesoresultado.idPDprocesoresultado = 0 Then
                            PDprocesoresultado.idPDproceso = idPDproceso
                            PDprocesoresultado.Nuevo(True)
                        Else
                            PDprocesoresultado.Modificar()
                        End If
                    Next
                End If
            End If
            '-------------------------------------------------------------------------

        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Modificar el registro de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Sub Eliminar(ByVal idPDproceso As Integer)
        Dim obj_Conexion As New cls_Conexion
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__Eliminar"
                .Parameters.Add("@idPDproceso", SqlDbType.Int).Value = idPDproceso
                .ExecuteNonQuery()
            End With
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Eliminar el registro de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
        End Try
    End Sub

    Public Function Buscar(ByVal idPDproceso As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            Buscar = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__Buscar"
                .Parameters.Add("@idPDproceso", SqlDbType.Int).Value = idPDproceso
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
                Buscar = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al Buscar el registro de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Sub CargarUltimo()
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__CargarUltimo"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarVariables(obj_Reader)
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarUltimo registro de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Sub

    Public Function CargarTodos() As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarTodos = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__CargarTodos"
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarTodos = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Public Function Clone() As Object Implements System.ICloneable.Clone
        Dim obj_PDproceso_Clon As New cls_PDproceso_
        obj_PDproceso_Clon.int_idPDproceso = Me.int_idPDproceso
        obj_PDproceso_Clon.int_idproduccion = Me.int_idproduccion
        obj_PDproceso_Clon.int_idproceso = Me.int_idproceso
        obj_PDproceso_Clon.dbl_cantidad = Me.dbl_cantidad
        obj_PDproceso_Clon.bit_segunproduccion = Me.bit_segunproduccion
        obj_PDproceso_Clon.int_tiposegunproduccion = Me.int_tiposegunproduccion
        obj_PDproceso_Clon.dbl_valor = Me.dbl_valor
        obj_PDproceso_Clon.col_Items = Me.col_Items
        Return obj_PDproceso_Clon
    End Function

    Function CargarXidproduccion(ByVal int_idproduccion As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidproduccion = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDproceso__CargarXidproduccion"
                .Parameters.Add("@idproduccion", SqlDbType.Int).Value = int_idproduccion
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidproduccion = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarTodos los registros de PDarticulo_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    Function CargarXidproduccionXidProceso(ByVal int_idproduccion As Integer, ByVal int_idproceso As Integer) As Boolean
        Dim obj_Conexion As New cls_Conexion
        Dim obj_Reader As SqlDataReader
        Try
            CargarXidproduccionXidProceso = False
            obj_Conexion.Conectar()
            With obj_Conexion.obj_SqlCommand
                .CommandType = CommandType.StoredProcedure
                .Connection = obj_Conexion.obj_SqlConnection
                .CommandText = "PDProceso__CargarXidproduccionXidProceso"
                .Parameters.Add("@idproduccion", SqlDbType.Int).Value = int_idproduccion
                .Parameters.Add("@idproceso", SqlDbType.Int).Value = int_idproceso
            End With
            obj_Reader = obj_Conexion.obj_SqlCommand.ExecuteReader
            If obj_Reader.HasRows Then
                CargarColeccion(obj_Reader)
                CargarXidproduccionXidProceso = True
            End If
        Catch ex As SqlClient.SqlException
            Throw New Exception("Error al CargarXidproduccionXidProceso los registros de PDproceso_." & Chr(13) & _
           "Por favor informe del siguiente detalle técnico:" & Chr(13) & _
           "Nro de error: " & ex.ErrorCode & "." & Chr(13) & _
           "Descripción: " & ex.Message)
        Finally
            obj_Conexion.Desconectar()
            obj_Conexion = Nothing
            obj_Reader = Nothing
        End Try
    End Function

    
End Class
